package com.mashibing.mq;

import javax.jms.*;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
 * @Author: JLL
 * @Date: 2020/2/15 10:49
 */
public class SenderQueue {

    public static void main(String[] args) throws Exception{

        //1、获得连接工厂
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                "admin",
                "admin",
                "tcp://localhost:61616"
        );
        //2、从工厂里拿连接
        //2.1 设置同步异步发送消息  true是异步   在下面的connection里也可以设置同步 异步
        connectionFactory.setSendAcksAsync(true);
        Connection connection = connectionFactory.createConnection();
        /*
        设置同步 异步
        ActiveMQConnection activeMQConnection = (ActiveMQConnection)connection;
        activeMQConnection.setUseAsyncSend(true);*/
        // 3.获取session
        /**
         * createSession第一个参数就是事务
         */
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4. 找目的地，获取destination，消费端，也会从这个目的地取消息
        //这里的目的有2种，一个是queue 一个是topic
        Queue queue = session.createQueue("user");

        // 5.1.消息创建者
        MessageProducer producer = session.createProducer(queue);
        //序列化对象
        Girl girl = new Girl("lucy", 18, 398.00);
        ObjectMessage objectMessage = session.createObjectMessage(girl);
        producer.send(objectMessage);

        BytesMessage bytesMessage = session.createBytesMessage();//字节流，传小文件的
        bytesMessage.writeUTF("hi~!");
        bytesMessage.writeBoolean(false);
        producer.send(bytesMessage);


        MapMessage mapMessage = session.createMapMessage();
        mapMessage.setString("name","xiaoya");
        mapMessage.setInt("age",18);
        mapMessage.setDouble("price",198.00);

        //当TTL到期，消息会进到死信队列里。 1s内没人消费它
        producer.setTimeToLive(1000);;
        producer.send(mapMessage);

/*
//        	producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //这里是配置成 不持久化
        // consumer -> 消费者
        // producer -> 创建者

        for (int i = 0; i < 1000; i++) {
             // 5.2. 创建消息
            TextMessage textMessage = session.createTextMessage("hi: " + i);

            // 5.3 向目的地写入消息

            if(i % 4 == 0) {
                // 设置消息的优先级
                // 对producer 整体设置
                //	producer.setPriority(9); 9的优先级是最高的，最容易被消费
//                producer.send(textMessage,DeliveryMode.PERSISTENT,9,1000 * 100);
                textMessage.setJMSPriority(9);
            }

            //如果开启事务了的话，只要session不commit，不管怎么send，这消息都发不了
            producer.send(textMessage);
            //	Thread.sleep(3000);

//            session.commit();
        }*/

        // 6.关闭连接
        connection.close();

        System.out.println("System exit....");



    }



}
